package my3;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class SuanFa3MapAnswer {
    public int lengthOfLongestSubstring(String s) {
        int right=0;
        int result = 0;
        int length = s.length();
        //为了不让在集合中的数重复，使用map集合。
        //使用map集合比set集合会增强性能和使用内存。
        //使用map记忆每一个字符的，当遇到重复字符时map会
        //直接通过键来取到值，来更新左边界省去了set中一次又一次的遍历
        Map<Character,Integer> map = new HashMap<>();

        for (int left = 0; left < length; left++) {
            char c = s.charAt(left);
            if (map.containsKey(c)){
                right = Math.max(right,map.get(c));
            }
           result = Math.max(result,left-right+1);
            map.put(c,left+1);

        }

        return result;
    }

    public static void main(String[] args) {
        SuanFa3MapAnswer suanFa3MapAnswer = new SuanFa3MapAnswer();
        String s = "abcabcabc";
        int i = suanFa3MapAnswer.lengthOfLongestSubstring(s);
        System.out.println(i);
    }
}
